package fachadas;

import persistencia.Persistencia;
import entidades.*;

/**
 * Implementa��o do padr�o Fa�ade
 * Classe para mediar as seguintes requisi��es: 
 *  ~> Camada de Neg�cios x Persistencia
 *  ~> UserInterfaceFacade x Persistencia (pois eh nesta fachada que a camada de negocios eh instanciada)
 * Esta <i>Interface<i> possui todos os metodos <i>static<i> uma vez 
 * @author Raildo, Tales
 *
 */

public class PersistenciaFacade {
	
	/**
	 * Encaminha a chamada para salvar o sistema para a classe Persistencia.
	 * @param gerenciador - Gerenciador da camada de neg�cios.
	 * @throws Exception - Caso o arquivo n�o seja encontrado, uma exce��o � lan�ada vinda da classe FileOutputStream.
	 */
	public static void gravaGerenciador(Gerenciador gerenciador) throws Exception {
		Persistencia.gravar(gerenciador, "gerenciador");

	}
	
	/**
	 * Retorna o gerenciador da camada de neg�cios pela da persistencia.
	 * 
	 * @return Gerenciador da camada de negocios.
	 * @throws Exception Caso o arquivo n�o seja encontrado, uma exce��o � lan�ada vinda da classe FileOutputStream.
	 */
	public static Gerenciador carregaGerenciador() throws Exception {
		return (Gerenciador) Persistencia.recuperar("gerenciador");
	}
	
	/**
	 * Recebe e encaminha a requisi��o para zerar a persistencia.
	 */
	public static void zerarPersistencia() {
		Persistencia.apagarArquivo("gerenciador");

	}
	
	/**
	 * Cria ou carrega o gerenciador da camada de neg�cios.
	 * @return
	 */
	public static Gerenciador initSystem() {
		Gerenciador gerenciador;
	if (Persistencia.verificaExistencia()) {
		try {
			gerenciador = carregaGerenciador();
			return gerenciador;
		} catch (Exception e) {
			gerenciador = new Gerenciador();
			return gerenciador;
		}
	} else {
		return new Gerenciador();
	}
}
	
}
